package design_pattern.singleton;

/**
 * 线程安全的单例模式
 * 
 * @author Administrator
 * 
 */
public class SingletonTheadSafe {

  private static SingletonTheadSafe instance = null;

  private SingletonTheadSafe() {

  }

  // 一个完整的实例创建步骤
  private synchronized static void init() {
    if (instance == null) // 第二重检查
      instance = new SingletonTheadSafe();
  }

  public static SingletonTheadSafe getInstance() {
    // 对instance对象进行双重检查
    if (instance == null) // 第一重检查
      init();
    return instance;
  }


  public static SingletonTheadSafe getInstanceTemp() {
    // 对instance对象进行双重检查
    if (instance == null) // 第一重检查

      // 用这种方式会造成instance对象的创建过程可能不完整，有可能会导致在多线程下产生instance=null异常。
      synchronized (instance) {
        if (instance == null) // 第二重检查
          instance = new SingletonTheadSafe();
      }
    return instance;
  }

}
